Emma Watson
Emma Watson, aka Hermione Granger, e está se tornando uma atriz de peso em Hollywood. Diferente de muitos atores mirins ela vem, na fase adulta, alcançando bastante espaço na indústria cinematográfica. Seus projetos fora da tela do cinema, como o HeForShe, demonstram que ela não tem medo de se posicionar de acordo com suas opiniões. Será que essa força de vontade também se reflete nos papéis que ela escolhe retratar, são eles pouco populares?
Nessa análise se utilizam dados do Rotten Tomatoes sobre os filmes de Emma Watson para encontrar grupos de filmes que tenham características semelhantes. Com relação a renda e nota atribuída pelos usuários do site.
from_page <- read_html("https://www.rottentomatoes.com/celebrity/emma_watson/") %>%
html_node("#filmographyTbl") %>%
html_table(fill=TRUE) %>%
as.tibble()
filmes = from_page %>%
filter(RATING != "No Score Yet",
`BOX OFFICE` != "—",
CREDIT != "Executive Producer") %>%
mutate(RATING = as.numeric(gsub("%", "", RATING)),
`BOX OFFICE` = as.numeric(gsub("[$|M]", "", `BOX OFFICE`))) %>%
filter(`BOX OFFICE` >= 1)
Uma boa forma de entender os dados com os quais se está lidando é ve-los através de alguma visualização sumarizada. Os scatterplots abaixo representam os números de renda e notas do RottenTomatoes dos filmes.
filmes %>%
ggplot(aes(x = "Filmes", y = RATING)) + theme_bw() +
geom_jitter(width = .01, height = 0, size = 2.5, alpha = .6, color="navy") +
labs(title="Rating dos filmes", x="", y="Rating (%)")
Num primeiro olhar, se pode perceber pelo menos dois grupos formados pelos filmes, um sendo composto exclusivamente pelo filme com rating mais baixo, The Circle de 2017.
Os valores de box office variam em intervalos maiores que os ratings dos filmes, por isso é interessante usar algum tipo de escala para normalizar os dados. Para que valores muito distintos não se sobressaiam e atrapalhem a definição dos grupos.
filmes %>%
ggplot(aes(x = "Filmes", y = `BOX OFFICE`)) +
geom_jitter(width = .02, height = 0, size = 2.5, alpha = .6, color="chartreuse3") +
labs(title="Box Office dos filmes (sem normalização)", x="", y="Renda (Milhões de dólares)")
A normalização utilizada distribui a distância entre os pontos de acordo com o quanto essa distância representa para a posição do ponto em questão. Por exemplo, a “distância” de 1 milhão de dólares significa mais para filmes que tiveram rendimento menor que 5 milhões do que para filmes que tiveram rendimento maior de 100 milhões.
Observando os dois gráficos se pode distinguir três ou mais grupos. O filme The Circle, que teve a menor nota no Rotten Tomatoes, pertence a massa de pontos localizada no início do eixo y, os filmes com os menores box offices. Isso pode ser um indício de que no conjunto de filmes de Emma Watson os filmes com menores notas no Rotten Tomatoes também tiverem pior rendimento de público, para validar ou invalidar essa suposição se utilizam técnicas de agrupamento.
O processo de agrupamento consiste em definir o que se considera distância entre pontos e grupos e aplicar essa definição para separar os pontos em grupos. Depois disso se avalia se os grupos formados são realmente semelhantes e representam grupos distintos e significativos dentro do conjunto.
Para agrupar as variáveis individualmente se utilizará o dendograma, um diagrama de árvore que relaciona grupos hierarquicamente com arestas e nós.
O diagrama mostra as similaridades dos filmes baseando-se na nota que eles receberam no Rotten Tomatoes, quanto mais comprida é a ligação entre dois grupos mais diferentes os são grupos. A linha é uma sugestão de onde deveria haver a separação de grupos. Nesse caso é sugerido que se tenha três grupos distintos.
row.names(filmes) = NULL
agrupamento_h = filmes %>%
column_to_rownames("TITLE") %>%
select(RATING) %>%
dist(method = "euclidian") %>%
hclust(method = "ward.D")
ggdendrogram(agrupamento_h, rotate = T, size = 2) +
geom_hline(yintercept = 45, color="navy")
Quando se juntam dois grupos muito diferentes o comprimento da junção aumenta muito, por isso é comum se separar os grupos na junção que começa a ter um comprimento muito maior que as anteriores. Se pode ver no gráfico abaixo que esse “salto” no comprimento acontece quando se tem três grupos.
data.frame(k = 1:NROW(agrupamento_h$height),
height = agrupamento_h$height) %>%
ggplot(aes(x = k, y = height)) +
geom_line(colour = "navy", alpha=.5) +
geom_point(colour = "navy") +
labs(x = "Junções feitas (15 - grupos)", y = "Diferença na junção", title="Rating")
Quando se analisa o Box Office tem-se três grupos distintos e diferentes dos três grupos formados no agrupamento por rating.
row.names(filmes) = NULL
agrupamento_h_bo = filmes %>%
column_to_rownames("TITLE") %>%
select(`BOX OFFICE`) %>%
dist(method = "euclidian") %>%
hclust(method = "ward.D")
ggdendrogram(agrupamento_h_bo, rotate = T, size = 2) +
geom_hline(yintercept = 250, color="chartreuse4")
Novamente, quanto se tem três grupos tem-se também um “salto” nas diferenças entre grupos.
data.frame(k = 1:NROW(agrupamento_h$height),
height = agrupamento_h$height) %>%
ggplot(aes(x = k, y = height)) +
geom_line(colour = "chartreuse4", alpha=.5) +
geom_point(colour = "chartreuse4") +
labs(x = "Junções feitas (15 - grupos)", y = "Diferença na junção", title="Box Office")
Agora, finalmente, serão utilizadas duas variáveis para agrupar os filmes. É importante notar, de novo, que o intervalo de valores de Box Office é bem maior que o de Rating. Isso faz com que box office tenha um peso muito maior no agrupamento, por isso é preciso padronizar os valores.
agrupamento_h_2d = filmes %>%
column_to_rownames("TITLE") %>%
select(RATING, `BOX OFFICE`) %>%
mutate(`BOX OFFICE` = log10(`BOX OFFICE`)) %>%
mutate_all(funs(scale)) %>%
dist(method = "euclidean") %>%
hclust(method = "centroid")
ggdendrogram(agrupamento_h_2d, rotate = TRUE) +
geom_hline(yintercept = 1, color="orangered1")
Ao observar o dendograma vê-se que as distâncias entre os grupos começam a aumentar muito quando se tem 5 grupos. Plotando a organização padronizada de 1 a 6 grupos também se percebe que existem 5 ou mais grupos bem distintos. O método escolhido para calcular a distância entre pontos e grupos foi o método centróide, que vê distância como a diferença entre o centros dos grupos, juntando os grupos com a menor diferença entre seus centros.
filmes2 = filmes %>% mutate(`BOX OFFICE` = log10(`BOX OFFICE`))
plota_hclusts_2d(agrupamento_h_2d,
filmes2,
c("RATING", "`BOX OFFICE`", "TITLE"),
linkage_method = "centroid", ks = 1:6) + scale_y_log10()
A silhueta, que representa o quão mais perto do seu grupo um ponto estão com relação ao segundo grupo mais próximo, mostra que mesmo com 5 grupos ainda existem alguma indefinição entre os pontos.
O agrupamento escolhido foi aquele com 5 grupos distintos, mesmo que alguns grupos tenham poucos pontos esse agrupamento parece separar bem os filmes.
O grupo 1 pode ser chamado de Desagradáveis porque tiveram ratings muito baixos e um box office baixo também, esse grupo é composto pelo filme já mencionado The Circle que desagradou público & crítica. Já o grupo 2 representa os Blockbusters filmes como os da franquia Harry Potter que tem muitos fãs e são um sucesso de bilheteria. O grupo 3, Nicho, teve a menor renda entre os grupos e o rating mediano, é composto pelo filme The Bling Ring, de Sofia Coppola, que agrada um tipo específico de crítica mas, aparentemente, não leva o público ao cinema. O grupo 4 teve ratings muito boas mas resultado menos rentável, é composto por filmes ditos Alternativos como As Vantagens de Ser Invisível. E o grupo 5 aparenta ser um ponto médio entre os filmes, tanto seu box office quando rating estão no centro dos outro grupos, é composto pelo filme As aventuras do Ratinho Despereaux, um filme de animação para crianças e será chamado de Animados.